package com.example.om_export.common.utils;

import org.apache.shiro.crypto.hash.SimpleHash;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.UUID;
import java.util.function.Consumer;

/**
 * 基础工具类
 * @author wb-ycl473317
 */
public class BaseUtil {

    public static String uuid(){
        return UUID.randomUUID().toString().replace("-","");
    }

    /**
     * 判断参数是否为空
     * @param str
     * @return 为空返回true
     */
    public static boolean isEmpty(String str){
        return str==null||"".equals(str)||"null".equals(str);
    }

    /**
     * md5 加密
     * @param source 原文
     * @param hashIterations hash次数
     * @param salt 盐
     * @return
     */
    public static String md5(String source,int hashIterations,Object salt){
        return new SimpleHash("MD5",source,salt,hashIterations).toHex();
    }

    /**
     * md5加密 不加盐
     * @param source 原文
     * @param hashIterations hash次数
     * @return
     */
    public static String md5NoSalt(String source,int hashIterations){
        return new SimpleHash("MD5",source,null,hashIterations).toHex();
    }

    /**
     * sha1 加密
     * @param source 原文
     * @return
     */
    public static String sha1(String source){

        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(source.getBytes());

            return new BigInteger(1,messageDigest.digest()).toString(16);
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
    /**
     * 一个可以批量消费list的方法
     * 可以理解成翻页获取数据 然后消费
     * @param source 待消费的list
     * @param limit 每次消费的个数（页大小）
     * @param consumer 消费者
     * @param <T>
     */
    public static <T> void batchConsume(List<T> source, int limit, Consumer<List<T>> consumer){
        if(source==null||limit<1){
            return ;
        }
        // 总页数
        int total= (int) Math.ceil(source.size()/(double)limit);
        for (int page = 0; page < total; page++) {
            int start = (page)*limit;
            int end = start+limit;
            if(end>source.size()){
                end=source.size();
            }
            consumer.accept(source.subList(start,end));
        }
    }


    public static void main(String[] args) {
        System.out.println(BaseUtil.md5("000000", 3, "天桥街道天桥小区柴金玲"));
    }
}
